#define _CRT_SECURE_NO_WARNINGS
#include"SList.h"

//第28讲：单链表专题
//1. 链表的概念及结构
//·链表也是线性表的一种
//·物理结构：不一定是线性的
//·逻辑结构：是线性的
//·链表是由一个一个的节点组成
//·针对顺序表：链表可以解决顺序表 中间/头部插入效率低下，增容降低运行效率，增容造成空间浪费的问题

//2. 单链表的实现
//void SListTest01()
//{
//	//创建节点:
//	node* node1=(node*)malloc(sizeof(node));
//	node1->data = 1;
//
//	node* node2 = (node*)malloc(sizeof(node));
//	node2->data = 2;
//
//	node* node3 = (node*)malloc(sizeof(node));
//	node3->data = 3;
//
//	node* node4 = (node*)malloc(sizeof(node));
//	node4->data = 4;
//
//	//连接节点:
//	node1->next = node2;
//	node2->next = node3;
//	node3->next = node4;
//	node4->next = NULL;
//
//	//打印:
//	SLTPrint(node1);
//}

void SListTest02()
{
	node* plist = NULL;
	//测试尾插
	SLTPushBack(&plist, 1);
	SLTPushBack(&plist, 2);
	SLTPushBack(&plist, 3);
	SLTPushBack(&plist, 4);
	SLTPrint(plist);

	//测试头插:
	SLTPushFront(&plist, 0);
	SLTPrint(plist);

	//测试尾删:
	//SLTPopBack(&plist);
	//SLTPrint(plist);
	//SLTPopBack(&plist);
	//SLTPrint(plist);

	//测试头删:
	//SLTPopFront(&plist);
	//SLTPrint(plist);

	//测试查找数据:
	node* find = SLTFind(plist,3);
	if (find == NULL)
	{
		printf("没找到!\n");
	}
	else
		printf("找到了!\n");

	//测试指定位置之前插入数据:
	SLTInsert(&plist, find, 350234);
	SLTPrint(plist);

	//测试在指定位置之后插入节点:
	find = SLTFind(plist, 350234);
	SLTInsertAfter(find, 666);
	SLTPrint(plist);

	//测试删除指定位置节点:
	find = SLTFind(plist, 350234);
	SLTErase(&plist, find);
	find = SLTFind(plist, 0);
	SLTErase(&plist, find);
	SLTPrint(plist);

	//SLTEraseAfter
	find = SLTFind(plist, 2);
	SLTEraseAfter(find);
	SLTPrint(plist);

	//测试销毁:
	SListDesTroy(&plist);
}

int main()
{
	//SListTest01();
	SListTest02();
	return 0;
}



